{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "toc": true
   },
   "source": [
    "<h1>Table of Contents<span class=\"tocSkip\"></span></h1>\n",
    "<div class=\"toc\" style=\"margin-top: 1em;\"><ul class=\"toc-item\"><li><span><a href=\"#Simulate-Heartbeat\" data-toc-modified-id=\"Simulate-Heartbeat-1\"><span class=\"toc-item-num\">1&nbsp;&nbsp;</span>Simulate Heartbeat</a></span></li><li><span><a href=\"#Tests-and-Plots\" data-toc-modified-id=\"Tests-and-Plots-2\"><span class=\"toc-item-num\">2&nbsp;&nbsp;</span>Tests and Plots</a></span></li></ul></div>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The autoreload extension is already loaded. To reload it, use:\n",
      "  %reload_ext autoreload\n"
     ]
    }
   ],
   "source": [
    "# Basic libraries import\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "import seaborn as sns\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "%matplotlib notebook\n",
    "\n",
    "import os\n",
    "import sys\n",
    "\n",
    "import itertools\n",
    "import collections\n",
    "\n",
    "# project specific libraries\n",
    "import scipy.signal as signal\n",
    "\n",
    "%load_ext autoreload\n",
    "%autoreload 2\n",
    "\n",
    "import heartbeat_utils"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Simulate Heartbeat\n",
    "[Source](http://stackoverflow.com/questions/4387878/simulator-of-realistic-ecg-signal-from-rr-data-for-matlab-or-python/33737898#33737898)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "# The \"Daubechies\" wavelet is a rough approximation to a real,\n",
    "# single, heart beat (\"pqrst\") signal\n",
    "pqrst = signal.wavelets.daub(10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Add the gap after the pqrst when the heart is resting. \n",
    "samples_rest = 10\n",
    "zero_array = np.zeros(samples_rest, dtype=float)\n",
    "pqrst_full = np.concatenate([pqrst,zero_array])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1c0fb0ecc0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(pqrst_full)\n",
    "plt.xlabel('Sample number')\n",
    "plt.ylabel('Amplitude (normalised)')\n",
    "plt.title('Heart beat signal Template')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Simulated Beats per minute rate\n",
    "bpm = 60\n",
    "bps = bpm / 60\n",
    "\n",
    "# Simumated period of time in seconds that the ecg is captured in\n",
    "capture_length = 10\n",
    "\n",
    "# Caculate the number of beats in capture time period \n",
    "# Round the number to simplify things\n",
    "num_heart_beats = int(capture_length * bps)\n",
    "\n",
    "# Concatonate together the number of heart beats needed\n",
    "ecg_template = np.tile(pqrst_full , num_heart_beats)\n",
    "\n",
    "# Add random (gaussian distributed) noise \n",
    "noise = np.random.normal(0, 0.01, len(ecg_template))\n",
    "ecg_template_noisy = noise + ecg_template"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1c0f945f28>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(ecg_template_noisy)\n",
    "plt.xlabel('Sample number')\n",
    "plt.ylabel('Amplitude (normalised)')\n",
    "plt.title('Heart ECG Template with Gaussian noise')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Tests and Plots"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 82,
   "metadata": {},
   "outputs": [],
   "source": [
    "bpm_series = [10, 70, 30, 65, 120, 160, 90, 10]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 83,
   "metadata": {},
   "outputs": [],
   "source": [
    "hb = heartbeat_utils.simulate_heartbeat(bpm_series)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 84,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<IPython.core.display.Javascript object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<img src=\"\" width=\"869.9166666666667\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "plt.plot(hb)\n",
    "plt.xlabel('Sample number')\n",
    "plt.ylabel('Amplitude (normalised)')\n",
    "plt.title('Heart ECG Template with Gaussian noise')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 85,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<IPython.core.display.Javascript object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<img src=\"\" width=\"499.58333333333337\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from matplotlib import animation\n",
    "\n",
    "%matplotlib notebook\n",
    "\n",
    "fig, ax = plt.subplots(dpi=100, figsize=(5, 4))\n",
    "ax.set_xlim(0, 0.25)\n",
    "ax.set_ylim(-1, 1)\n",
    "\n",
    "line, = ax.plot([], [], lw=2)\n",
    "#epoch_text = ax.text(0, 0, \"Epoch 0\")\n",
    "\n",
    "def animate(i, line):\n",
    "    x = np.linspace(0, 2, 500)\n",
    "    y = hb[i:i+500]\n",
    "    #epoch_text.set_text(\"Epoch {}\".format(i, cost))\n",
    "    line.set_data(x, y)\n",
    "    return line\n",
    "\n",
    "ani = animation.FuncAnimation(fig, animate, len(hb), interval=5, repeat=True,\n",
    "                             fargs=[line])"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python [conda env:api-dev]",
   "language": "python",
   "name": "conda-env-api-dev-py"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.7"
  },
  "toc": {
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "toc_cell": true,
   "toc_position": {},
   "toc_section_display": "block",
   "toc_window_display": true
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
